home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / BitSet.h < prev    next >
C/C++ Source or Header  |  1992-07-23  |  3KB  |  104 lines

  1. #ifndef BitSet_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define BitSet_First
  7.  
  8. //------ class BitSet: a set of small integers (adapted from the oops library)
  9.  
  10. #include "Object.h"
  11.  
  12. class BitSet: public Object {
  13. protected:
  14.     u_long m;
  15.     
  16.     BitSet(const BitSet &)
  17.     { }
  18.     BitSet(u_long i, double) // second parameter double is a trick 
  19.                  // to overload BitSet(unsigned long i1);        
  20.     { m= i; }
  21. public:
  22.     MetaDef(BitSet);
  23.  
  24.     BitSet()
  25.     { m= 0; }
  26.     BitSet(int i1)
  27.     { m= BIT(i1); }
  28.     BitSet(int i1, int i2)        
  29.     { m= BIT(i1)|BIT(i2); }
  30.     BitSet(int i1, int i2, int i3)
  31.     { m= BIT(i1)|BIT(i2)|BIT(i3); }
  32.     BitSet(int i1, int i2, int i3, int i4)
  33.     { m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4); }
  34.     BitSet(int i1, int i2, int i3, int i4, int i5)
  35.     {  m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4)|BIT(i5); }
  36.     BitSet(int i1, int i2, int i3, int i4, int i5, int i6)
  37.     { m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4)|BIT(i5)|BIT(i6); }
  38.     BitSet(int i1, int i2, int i3, int i4, int i5, int i6, int i7)
  39.     { m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4)|BIT(i5)|BIT(i6)|BIT(i7); }
  40.     BitSet(BitSet *n)         
  41.     { m= n->m; }
  42.     
  43.  
  44.     BitSet operator~()              
  45.     { return BitSet(~m, 0.0); }
  46.     BitSet operator-(BitSet n)      
  47.     { return BitSet(m & ~n.m, 0.0); }
  48.     bool operator>(BitSet n)        
  49.     { return m == (m|n.m) && m != n.m; }
  50.     bool operator<(BitSet n)        
  51.     { return n.m == (m|n.m) && m != n.m; }
  52.     bool operator>=(BitSet n)       
  53.     { return m == (m|n.m); }
  54.     bool operator<=(BitSet n)       
  55.     { return n.m == (m|n.m); }
  56.     bool operator==(BitSet n)       
  57.     { return m == n.m; }
  58.     bool operator!=(BitSet n)       
  59.     { return m != n.m; }
  60.     BitSet operator&(BitSet n)      
  61.     { return BitSet(m & n.m, 0.0); }
  62.     BitSet operator^(BitSet n)      
  63.     { return BitSet(m ^ n.m, 0.0); }
  64.     BitSet operator|(BitSet n)      
  65.     { return BitSet(m | n.m, 0.0); }
  66.     // void operator=(BitSet n)        { m = n.m; } // necessary???
  67.     void operator-=(BitSet n)       
  68.     { m &= ~n.m; }
  69.     void operator&=(BitSet n)       
  70.     { m &= n.m; }
  71.     void operator^=(BitSet n)       
  72.     { m ^= n.m; }
  73.     void operator|=(BitSet n)       
  74.     { m |= n.m; }
  75.     int AsMask()                    
  76.     { return m; }
  77.     bool Includes(int i)            
  78.     { return (m & BIT(i)) != 0; }
  79.     bool Contains(int i)            
  80.     { return Includes(i); }
  81.     unsigned long Hash();
  82.     bool IsEmpty();
  83.     bool IsEqual (Object*);
  84.     OStream& PrintOn(OStream&);
  85.     IStream& ReadFrom(IStream&);
  86.     int Size();
  87.     int Capacity();
  88. };
  89.  
  90. //---- class BitSetIter ---------------------------------------------/
  91.  
  92. class BitSetIter {
  93.     BitSet *cb;
  94.     int pos;
  95. public:
  96.     BitSetIter(BitSet *s)
  97.     { cb=s; pos= 0; }
  98.     
  99.     void Reset(BitSet *);
  100.     int operator()();
  101. };
  102.  
  103. #endif
  104.